home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / include / gsl / gsl_errno.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-20  |  7.0 KB  |  189 lines

  1. /* err/gsl_errno.h
  2.  * 
  3.  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, Brian Gough
  4.  * 
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or (at
  8.  * your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19.  
  20. #ifndef __GSL_ERRNO_H__
  21. #define __GSL_ERRNO_H__
  22.  
  23. #include <stdio.h>
  24. #include <errno.h>
  25.  
  26. #undef __BEGIN_DECLS
  27. #undef __END_DECLS
  28. #ifdef __cplusplus
  29. # define __BEGIN_DECLS extern "C" {
  30. # define __END_DECLS }
  31. #else
  32. # define __BEGIN_DECLS /* empty */
  33. # define __END_DECLS /* empty */
  34. #endif
  35.  
  36. __BEGIN_DECLS
  37.  
  38. enum { 
  39.   GSL_SUCCESS  = 0, 
  40.   GSL_FAILURE  = -1,
  41.   GSL_CONTINUE = -2,  /* iteration has not converged */
  42.   GSL_EDOM     = 1,   /* input domain error, e.g sqrt(-1) */
  43.   GSL_ERANGE   = 2,   /* output range error, e.g. exp(1e100) */
  44.   GSL_EFAULT   = 3,   /* invalid pointer */
  45.   GSL_EINVAL   = 4,   /* invalid argument supplied by user */
  46.   GSL_EFAILED  = 5,   /* generic failure */
  47.   GSL_EFACTOR  = 6,   /* factorization failed */
  48.   GSL_ESANITY  = 7,   /* sanity check failed - shouldn't happen */
  49.   GSL_ENOMEM   = 8,   /* malloc failed */
  50.   GSL_EBADFUNC = 9,   /* problem with user-supplied function */
  51.   GSL_ERUNAWAY = 10,  /* iterative process is out of control */
  52.   GSL_EMAXITER = 11,  /* exceeded max number of iterations */
  53.   GSL_EZERODIV = 12,  /* tried to divide by zero */
  54.   GSL_EBADTOL  = 13,  /* user specified an invalid tolerance */
  55.   GSL_ETOL     = 14,  /* failed to reach the specified tolerance */
  56.   GSL_EUNDRFLW = 15,  /* underflow */
  57.   GSL_EOVRFLW  = 16,  /* overflow  */
  58.   GSL_ELOSS    = 17,  /* loss of accuracy */
  59.   GSL_EROUND   = 18,  /* failed because of roundoff error */
  60.   GSL_EBADLEN  = 19,  /* matrix, vector lengths are not conformant */
  61.   GSL_ENOTSQR  = 20,  /* matrix not square */
  62.   GSL_ESING    = 21,  /* apparent singularity detected */
  63.   GSL_EDIVERGE = 22,  /* integral or series is divergent */
  64.   GSL_EUNSUP   = 23,  /* requested feature is not supported by the hardware */
  65.   GSL_EUNIMPL  = 24,  /* requested feature not (yet) implemented */
  66.   GSL_ECACHE   = 25,  /* cache limit exceeded */
  67.   GSL_ETABLE   = 26,  /* table limit exceeded */
  68.   GSL_ENOPROG  = 27,  /* iteration is not making progress towards solution */
  69.   GSL_ENOPROGJ = 28,  /* jacobian evaluations are not improving the solution */
  70.   GSL_ETOLF    = 29,  /* cannot reach the specified tolerance in F */
  71.   GSL_ETOLX    = 30,  /* cannot reach the specified tolerance in X */
  72.   GSL_ETOLG    = 31,  /* cannot reach the specified tolerance in gradient */
  73.   GSL_EOF      = 32   /* end of file */
  74. } ;
  75.  
  76. void gsl_error (const char * reason, const char * file, int line,
  77.         int gsl_errno);
  78.  
  79. void gsl_warning (const char * reason, const char * file, int line,
  80.           int gsl_errno) ;
  81.  
  82. void gsl_stream_printf (const char *label, const char *file,
  83.             int line, const char *reason);
  84.  
  85. const char * gsl_strerror (const int gsl_errno);
  86.  
  87. typedef void gsl_error_handler_t (const char * reason, const char * file,
  88.                   int line, int gsl_errno);
  89.  
  90. typedef void gsl_stream_handler_t (const char * label, const char * file,
  91.                    int line, const char * reason);
  92.  
  93. gsl_error_handler_t * 
  94. gsl_set_error_handler (gsl_error_handler_t * new_handler);
  95.  
  96. gsl_error_handler_t *
  97. gsl_set_error_handler_off (void);
  98.  
  99. gsl_stream_handler_t * 
  100. gsl_set_stream_handler (gsl_stream_handler_t * new_handler);
  101.  
  102. FILE * gsl_set_stream (FILE * new_stream);
  103.  
  104. /* GSL_ERROR: call the error handler, and return the error code */
  105.  
  106. #define GSL_ERROR(reason, gsl_errno) \
  107.        do { \
  108.        gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \
  109.        return gsl_errno ; \
  110.        } while (0)
  111.  
  112. /* GSL_ERROR_VAL: call the error handler, and return the given value */
  113.  
  114. #define GSL_ERROR_VAL(reason, gsl_errno, value) \
  115.        do { \
  116.        gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \
  117.        return value ; \
  118.        } while (0)
  119.  
  120. /* GSL_ERROR_VOID: call the error handler, and then return
  121.    (for void functions which still need to generate an error) */
  122.  
  123. #define GSL_ERROR_VOID(reason, gsl_errno) \
  124.        do { \
  125.        gsl_error (reason, __FILE__, __LINE__, gsl_errno) ; \
  126.        return ; \
  127.        } while (0)
  128.  
  129. /* GSL_ERROR_NULL suitable for out-of-memory conditions */
  130.  
  131. #define GSL_ERROR_NULL(reason, gsl_errno) GSL_ERROR_VAL(reason, gsl_errno, 0)
  132.  
  133.  
  134. /* GSL library code can occasionally generate warnings, which are not
  135.    intended to be fatal. You can compile a version of the library with
  136.    warnings turned off globally by defining the preprocessor constant
  137.    GSL_WARNINGS_OFF. This turns off the warnings, but does not disable
  138.    error handling in any way or turn off error messages.
  139.  
  140.    GSL_WARNING() is not intended for use in client code -- use
  141.    GSL_MESSAGE() instead.  */
  142.     
  143. #ifdef GSL_WARNINGS_OFF   /* throw away warnings */
  144. #define GSL_WARNING(warning, gsl_errno) \
  145.        do { } while(0)
  146. #else                     /* output all warnings */
  147. #define GSL_WARNING(warning, gsl_errno) \
  148.        do { \
  149.        gsl_warning (warning, __FILE__, __LINE__, gsl_errno) ; \
  150.        } while (0)
  151. #endif
  152.  
  153. /* Warnings can also be turned off at runtime by setting the variable
  154.    gsl_warnings_off to a non-zero value */
  155.  
  156. #ifdef GSL_EXPORTS
  157. __declspec(dllexport) int gsl_warnings_off ;
  158. #elif defined(GSL_IMPORTS)
  159. __declspec(dllimport) int gsl_warnings_off ;
  160. #else
  161. extern int gsl_warnings_off ;
  162. #endif
  163.  
  164.  
  165. /* Sometimes you have several status results returned from
  166.  * function calls and you want to combine them in some sensible
  167.  * way. You cannot produce a "total" status condition, but you can
  168.  * pick one from a set of conditions based on an implied hierarchy.
  169.  *
  170.  * In other words:
  171.  *    you have: status_a, status_b, ...
  172.  *    you want: status = (status_a if it is bad, or status_b if it is bad,...)
  173.  *
  174.  * In this example you consider status_a to be more important and
  175.  * it is checked first, followed by the others in the order specified.
  176.  *
  177.  * Here are some dumb macros to do this.
  178.  */
  179. #define GSL_ERROR_SELECT_2(a,b)       ((a) != GSL_SUCCESS ? (a) : ((b) != GSL_SUCCESS ? (b) : GSL_SUCCESS))
  180. #define GSL_ERROR_SELECT_3(a,b,c)     ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_2(b,c))
  181. #define GSL_ERROR_SELECT_4(a,b,c,d)   ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_3(b,c,d))
  182. #define GSL_ERROR_SELECT_5(a,b,c,d,e) ((a) != GSL_SUCCESS ? (a) : GSL_ERROR_SELECT_4(b,c,d,e))
  183.  
  184. #define GSL_STATUS_UPDATE(sp, s) do { if ((s) != GSL_SUCCESS) *(sp) = (s);} while(0)
  185.  
  186. __END_DECLS
  187.  
  188. #endif /* __GSL_ERRNO_H__ */
  189.